package controlador.buzones;

import java.io.Serializable;
import java.util.HashMap;

/**
 * Objeto que modela los mensajes que se pasan entre los aut&oacute;matas.
 * @author Globex Inc.
 */
public class Mensaje implements Serializable {
	
	private static final long serialVersionUID = 4L;

	/**
	 * Nombre de automata que evia el mensaje. Puede ser maestro, primero, segundo o tercero
	 */
	private String _source;
	
	/**
	 * Nombre de automata que recibe el mensaje. Puede ser maestro, primero, segundo o tercero
	 */
	private String _target;
	
	/**
	 * Tipo del mensaje
	 */
	private MessageTypes _type;

	/**
	 * Lista con los elementos del mensaje. 
	 */
	private HashMap<String, String> _message;

	/**
	 * Permite obtener el emisor del mensaje.
	 * @return El emisor del mensaje. Puede ser null.
	 */
	public String get_source() {
		return _source;
	}

	/**
	 * Cmabio el valor del emisor del mensaje.
	 * @param source Nuevo valor del emisor del mensaje.
	 */
	public void set_source(String source) {
		_source = source;
	}

	/**
	 * Devuelve el receptor del mensaje.
	 * @return El receptor del mensaje
	 */
	public String get_target() {
		return _target;
	}

	/**
	 * Cambia el valor del receptor del mensaje.
	 * @param target En nuevo valor para el receptor del mensaje.
	 */
	public void set_target(String target) {
		_target = target;
	}
	
	/**
	 * Devuelve el tipo del mensaje.
	 * @return El tipo del mensaje.
	 */
	public MessageTypes get_type() {
		return _type;
	}

	/**
	 * Cambia el valor del tipo de mensaje.
	 * @param type Nuevo valor del tipo de mensaje.
	 */
	public void set_type(MessageTypes type) {
		_type = type;
	}

	/**
	 * Devuelve el contenido del mensaje.
	 * @return El contenido del mensaje.
	 */
	public HashMap<String, String> get_message() {
		return _message;
	}

	/**
	 * Cambia el valor del contenido del mensaje.
	 * @param message Nuevo contenido del mensaj.
	 */
	public void set_message(HashMap<String, String> message) {
		_message = message;
	}
	
	/**
	 * Muestra por pantalla informaci&oacute; de este mensaje.
	 */
	public void print() {
		System.out.println("Mensaje de "+_source+" para "+_target);
		System.out.println("\tTipo: "+_type);
		if(_message != null)
			for(String key : _message.keySet())
				System.out.println(key+" = "+_message.get(key));
		else
			System.out.println("Message = null");
	}
}
